var integerBreak = function(n) {
  let dp = [] //dp[i] 是整数 i 的最大乘积值
  dp[1] = 0 // 0+1=1  0*1=0
  dp[2] = 1 // 1+1=2 1*1=1
  dp[3] = 2 // 1+2=3  1*2=2
  for(let i = 4; i <= n; i++) {
    // 开始计算dp[i] （i>=4)的最大乘积值,也就是计算出4到n的最大乘积数
    // 找到所有和为4的值 
    // 1+3  2+2  3+1
    // 1*3=3 2*2=4 3*1=3
    let tempMax = 0
    for(let j = 1;j<i;j++) {
      // 获得两个正整数j 和 i-j 合为i
      // 考虑两种情况最大乘积数可能是固定j， j*（i-j） 也可能是j*dp[i-j],这里为什么只要考虑一遍就够了而不是也将j也拆分了
      //    是因为拆分j到最后会重复，比如2*4 必然会有一个 4*2，所以考虑一边就够了
      // 所以dp[i]的最大值是  Math.max(j*(i-j),j*dp[i-j])
      let buChai = j * (i-j)   
      let ChaiFen = j * dp[i-j]
      tempMax = Math.max(tempMax,buChai,ChaiFen)
    }
    dp[i] = tempMax
  }
  return dp[n]
};
console.log(integerBreak(10));
